package hershey.java07001.java_basic.main;

public class M001 {
    /**
     * 编译：javac HelloWorld.java
     *           javac HelloWorld.java -d D:\Temp
     *           javac HelloWorld.java -d D:\Temp -encoding utf-8
     *           javac @source_list_file.txt -d D:\Temp -encoding utf-8
     * 运行：java HelloWorld

     *  main: 方法的名称，固定为main，以便JVM识别。main方法是Java程序的入口,在 java 核心编程中，JVM 会查找类中的
     *          public static void main(String[]args)，如果找不到该方法就抛出错误 NoSuchMethodError:main 程序终止
     *  public: 这是访问修饰符，表示该方法是公共的，可以被任何类访问。这意味着JVM可以从任何地方调用这个方法。
     *  static: 表示该方法是静态的，不需要创建类的实例即可调用, 这使得JVM可以直接通过类名来调用该方法。静态方法加载到内存中就可直接调用，
     *          实例方法需要创建实例对象才可以。由于实例对象的构造器可以被重载，如果main方法不声明为静态，JVM会无法确认调用哪个main方法。
     *  void: 表示该方法不返回任何值。
     *  String[] args: 这是一个字符串数组，表示命令行参数。把数组类型和数组名称分开，清晰地表示这是一个字符串数组
     *  String args[]:等价的数组声明方式, 把数组的括号放在变量名的后面
     *  String... args:表示可以传递零个或多个 String 参数给方法,可变参数在实际使用中是被当作一个数组处理的，因此可以像处理数组一样处理可变参数
     */
    public static void main(String[] args) {

        // java 枚举
        M001 m001 = new M001();
        m001.test = EnumTest.test1;
    }

    // java 枚举
    enum EnumTest {test1, test2, test3}
    EnumTest test;

    // 成员变量：包括实例变量和类变量。 类内、方法体外定义的变量。
    // 实例变量：无static修饰（非静态变量）：随着对象的建立而存在于堆内存中，生命周期随着对象的消失而消失。实例变量属对象私有。
    private String general_string = "general_string";
    // 类变量: 有static修饰（静态变量）：随着类的加载而存在于方法区中，生命周期随着类的消失而消失。类变量是所有对象共有。
    private static String static_string = "static_string";

    /**
     * 类名首字母大写、方法名首字母小写
     * 标识符(类名|变量名|方法名):以(A-Z)|(a-z)、$、_开头，之后可以是(A-Z)|(a-z)、$、_、(0-9).大小写敏感
     * 访问控制修饰符: 控制类、变量、方法和构造函数的访问权限（private|default|protected|public）
     *              src/main/java/hershey/java07001/java_basic/a_demo/m001/access_control_modifiers
     * 非访问控制修饰符: 用于提供额外的语义信息，控制类、方法、变量的行为和特性(static|final|abstract|synchronized|volatile)
     *                src/main/java/hershey/java07001/java_basic/a_demo/m001/non_access_modifiers
     */
    public void testM1() {
    }

}
